''''''''''''''''''''''''''''''''''''''''
# 作者：cacho_37967865
# 博客：https://blog.csdn.net/sinat_37967865
# 文件：high_function.py
# 日期：2019-09-09
# 主题：提升Python程序性能的好习惯1
'''''''''''''''''''''''''''''''''''''''''


#1. 判断变量num是否为整数类型,性能最好用isinstance()
num = 1

print("调用三次函数：",type(num) == type(0) )
print("身份比较：",type(num) is type(0) )
print("调用一次函数：",isinstance(num,(int)) )


#2. 不要在重复操作的内容作为参数放到循环条件中，避免重复运算。
c =[1,2,3]
i = 1
j = 1

while i < len(c):
   print("每次循环都需要重新执行len(a)")
   i += 1

m = len(c)
while j < m:
    print("len(a)仅执行一次")
    j += 1


#3. 映射（比如dict等）的搜索速度远快于条件语句（如if等）
a = 1
b = 1

if a == 1:
   b = 10
elif a == 2:
   b = 20
print("if查找：",b)     #结果为10

d = {1:10,2:20}
e =d[a]
print("dict查找,性能更优：",e)    # 结果为10


#4. 对序列（str、list、tuple等），直接迭代序列元素，比迭代元素的索引速度要更快。
f = [1,2,3]

for item in f:
    print("迭代元素：",item)
for i in range(len(f)):
    print("迭代索引：",f[i])


#5. 采用生成器表达式替代列表解析
f = 'File.txt'         #计算文件f名称长度的非空字符个数

l1 = sum([len(word) for line in f for word in line.split()])
print("生成器表达式：",l1)
l2 = sum(len(word) for line in f for word in line.split())
print("列表解析：",l2)
